7a0bda5daa4c407343eecda08ff41a5aaf66a55e,src/dr/evolution/tree/KCPathDifferenceMetric.java,KCPathDifferenceMetric,getMetric,#Tree#Tree#ArrayList#,40
Before Change
public ArrayList<Double> getMetric(Tree tree1, Tree tree2, ArrayList<Double> lambda) {
int dim = tree1.getExternalNodeCount()*tree1.getExternalNodeCount();
double[] smallMOne = new double[dim];
double[] largeMOne = new double[dim];
double[] smallMTwo = new double[dim];
double[] largeMTwo = new double[dim];
//check if taxon lists are in the same order!!
if (tree1.getExternalNodeCount() != tree2.getExternalNodeCount()) {
throw new RuntimeException("Different number of taxa in both trees.");
} else {
for (int i = 0; i < tree1.getExternalNodeCount(); i++) {
if (tree1.getNodeTaxon(tree1.getExternalNode(i)) != tree2.getNodeTaxon(tree2.getExternalNode(i))) {
throw new RuntimeException("Mismatch between taxa in both trees: " + tree1.getNodeTaxon(tree1.getExternalNode(i)) + " vs. " + tree2.getNodeTaxon(tree2.getExternalNode(i)));
}
}
After Change
public ArrayList<Double> getMetric(Tree tree1, Tree tree2, ArrayList<Double> lambda) {
int dim = (tree1.getExternalNodeCount()-2)*(tree1.getExternalNodeCount()-1)+tree1.getExternalNodeCount();
double[] smallMOne = new double[dim];
double[] largeMOne = new double[dim];
double[] smallMTwo = new double[dim];
double[] largeMTwo = new double[dim];
//check if taxon lists are in the same order!!
if (tree1.getExternalNodeCount() != tree2.getExternalNodeCount()) {
throw new RuntimeException("Different number of taxa in both trees.");
} else {
for (int i = 0; i < tree1.getExternalNodeCount(); i++) {
if (!tree1.getNodeTaxon(tree1.getExternalNode(i)).getId().equals(tree2.getNodeTaxon(tree2.getExternalNode(i)).getId())) {
throw new RuntimeException("Mismatch between taxa in both trees: " + tree1.getNodeTaxon(tree1.getExternalNode(i)).getId() + " vs. " + tree2.getNodeTaxon(tree2.getExternalNode(i)).getId());
}
}